﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using NHibernate;
using Sistema.Dominio;
using Sistema.IDAO;
using NHibernate.Criterion;

namespace Sistema.DAO.Nhibernate.DAO
{
    class UsuarioDAONHibernate : Helper.BaseDAONHibernate<UsuarioInfo>, IUsuarioDAO
    {
        /// <summary>
        /// retorna verdadeiro se ja existe um usuario como este cadastrado.
        /// </summary>
        /// <param name="dadosVerificacao"></param>
        /// <returns></returns>
        public bool VerificaSeJaCadastrado(UsuarioInfo dadosVerificacao)
        {
            ICriteria criteria = this._session.CreateCriteria<UsuarioInfo>("usuario");
            criteria.CreateAlias("usuario.DadosPessoais", "dadosPessoais");
            criteria.Add(Expression.Eq("dadosPessoais.Cpf", dadosVerificacao.DadosPessoais.Cpf));
            return criteria.List().Count >1;

           // string hql = "from UsuarioInfo Usuario where Usuario.DadosPessoais.Cpf = " + dadosVerificacao.DadosPessoais.Cpf.ToString();
           // return this._session.CreateQuery(hql).List().Count > 1;
        }


        public UsuarioInfo PerquisaPorLogin(LoginVO dadosLogin)
        {
            ICriteria criteria = this._session.CreateCriteria<UsuarioInfo>("usuario");
            criteria.CreateAlias("usuario.Login","Login");
            criteria.Add(Expression.Eq("Login.Login", dadosLogin.Login));
            criteria.Add(Expression.Eq("Login.Senha", dadosLogin.Senha));
            IList<UsuarioInfo> resultado=  criteria.List<UsuarioInfo>();

            if (resultado.Count == 0)
            {
                return null;
            }
            else
            {
                return resultado.First<UsuarioInfo>();
            }
        }
    }
}
